﻿using jiuyuan.数据.基础数据类;
using jiuyuan.数据.共享类; // 添加这个using语句

namespace jiuyuan.数据.玩家类;

/// <summary>
/// 游戏玩家类 - 代表游戏世界中的战斗单位
/// 这是游戏副本、战斗等游戏机制中的具体玩家实例
/// 与用户账户系统中的"玩家角色"不同，这个类专注于游戏战斗逻辑
/// </summary>
public class 玩家 : 战斗单位
{
    public int 等级 { get; set; }
    public int 经验值 { get; set; }
    public ICollection<游戏元素> 技能仓库 { get; set; } = [];
    public List<游戏元素> 当前技能槽 { get; set; } = []; // 最多5个
    public ICollection<游戏元素> 仓库物品 { get; set; } = [];
    public ICollection<游戏元素> 装备列表 { get; set; } = [];
    public bool 是否自动战斗 { get; set; } = false; // 是否启用自动战斗

    public new void 重新计算属性()
    {
        base.重新计算属性();

        // 计算装备加成
        foreach (var 装备 in 装备列表)
        {
            当前属性 = 属性配置.合并属性(当前属性, 装备.基础属性);
        }

        // 确保当前生命值不超过最大值
        当前生命值 = Math.Min(当前生命值, 当前属性.生命值);
        当前魔法值 = Math.Min(当前魔法值, 当前属性.魔法值);
    }
    
    /// <summary>
    /// 检查玩家是否拥有指定技能
    /// </summary>
    public bool 拥有技能(Guid 技能Id)
    {
        return 技能仓库.Any(s => s.Id == 技能Id && s.类型 == 物品类型.技能);
    }
    
    /// <summary>
    /// 检查玩家是否拥有指定物品
    /// </summary>
    public bool 拥有物品(Guid 物品Id)
    {
        return 仓库物品.Any(i => i.Id == 物品Id) || 装备列表.Any(i => i.Id == 物品Id);
    }
    
    /// <summary>
    /// 获取指定物品的数量
    /// </summary>
    public int 获取物品数量(Guid 物品Id)
    {
        var 仓库物品数量 = 仓库物品.Where(i => i.Id == 物品Id).Sum(i => i.数量);
        var 装备物品数量 = 装备列表.Where(i => i.Id == 物品Id).Sum(i => i.数量);
        return 仓库物品数量 + 装备物品数量;
    }
}